package com.yanqu.road.server.manager.cross.battle.enums;

import java.util.*;
import java.util.List;

/**
 * @Author wpj
 * @Date 2020/9/29
 */
public enum HuaShiGangModeConnection {

    /**
     * 固定连接
     */
    C1_2_1 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            l0.add(1);
            map.put(0, l0);
            return map;
        }
    },

    C1_3_1 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            l0.add(1);
            l0.add(2);
            map.put(0, l0);
            return map;
        }
    },

    C3_1_1 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(-1);
            map.put(1, l1);

            List<Integer> l2 = new ArrayList<>();
            l2.add(-2);
            map.put(2, l2);
            return map;
        }
    },

    C2_1_1 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(-1);
            map.put(1, l1);
            return map;
        }
    },

    C1_1_1 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            map.put(0, l0);
            return map;
        }
    },

    /**
     * 非固定连接
     */

    C2_2_1 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(0);
            map.put(1, l1);
            return map;
        }
    },
    C2_2_2 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            l0.add(1);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(0);
            map.put(1, l1);
            return map;
        }
    },
    C2_2_3 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(0);
            l1.add(-1);
            map.put(1, l1);
            return map;
        }
    },

    C2_3_1 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(0);
            l1.add(1);
            map.put(1, l1);
            return map;
        }
    },

    C2_3_2 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            l0.add(1);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(1);
            map.put(1, l1);
            return map;
        }
    },
    C2_3_3 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            l0.add(1);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(0);
            l1.add(1);
            map.put(1, l1);
            return map;
        }
    },
    C2_3_4 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(0);
            l1.add(-1);
            l1.add(1);
            map.put(1, l1);
            return map;
        }
    },
    C2_3_5 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            l0.add(1);
            l0.add(2);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(1);
            map.put(1, l1);
            return map;
        }
    },

    C3_2_1 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(0);
            map.put(1, l1);

            List<Integer> l2 = new ArrayList<>();
            l2.add(-1); // x-1 y+1
            map.put(2, l2);
            return map;
        }
    },
    C3_2_2 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(-1);
            map.put(1, l1);

            List<Integer> l2 = new ArrayList<>();
            l2.add(-1); // x-1 y+1
            map.put(2, l2);
            return map;
        }
    },
    C3_2_3 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(-1);
            l1.add(0);
            map.put(1, l1);

            List<Integer> l2 = new ArrayList<>();
            l2.add(-1); // x-1 y+1
            map.put(2, l2);
            return map;
        }
    },
    C3_2_4 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            l0.add(1);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(0);
            map.put(1, l1);

            List<Integer> l2 = new ArrayList<>();
            l2.add(-1); // x-1 y+1
            map.put(2, l2);
            return map;
        }
    },
    C3_2_5 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(-1);
            map.put(1, l1);

            List<Integer> l2 = new ArrayList<>();
            l2.add(-1);
            l2.add(-2);
            map.put(2, l2);
            return map;
        }
    },


    C3_3_1 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(0);
            map.put(1, l1);

            List<Integer> l2 = new ArrayList<>();
            l2.add(0);
            map.put(2, l2);
            return map;
        }
    },
    C3_3_2 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(0);
            l1.add(1);
            map.put(1, l1);

            List<Integer> l2 = new ArrayList<>();
            l2.add(0);
            map.put(2, l2);
            return map;
        }
    },
    C3_3_3 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(0);
            l1.add(-1);
            map.put(1, l1);

            List<Integer> l2 = new ArrayList<>();
            l2.add(0);
            map.put(2, l2);
            return map;
        }
    },
    C3_3_4 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            l0.add(1);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(0);
            l1.add(1);
            map.put(1, l1);

            List<Integer> l2 = new ArrayList<>();
            l2.add(0);
            map.put(2, l2);
            return map;
        }
    },
    C3_3_5 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(0);
            l1.add(-1);
            map.put(1, l1);

            List<Integer> l2 = new ArrayList<>();
            l2.add(0);
            l2.add(-1);
            map.put(2, l2);
            return map;
        }
    },
    C3_3_6 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            l0.add(1);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(0);
            map.put(1, l1);

            List<Integer> l2 = new ArrayList<>();
            l2.add(0);
            l2.add(-1);
            map.put(2, l2);
            return map;
        }
    },
    C3_3_7 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(0);
            l1.add(-1);
            l1.add(1);
            map.put(1, l1);

            List<Integer> l2 = new ArrayList<>();
            l2.add(0);
            map.put(2, l2);
            return map;
        }
    },
    C3_3_8 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(-1);
            map.put(1, l1);

            List<Integer> l2 = new ArrayList<>();
            l2.add(0);
            l2.add(-1);
            map.put(2, l2);
            return map;
        }
    },
    C3_3_9 {
        @Override
        Map<Integer, List<Integer>> buildConnection() {
            Map<Integer, List<Integer>> map = new HashMap<>();
            List<Integer> l0 = new ArrayList<>();
            l0.add(0);
            l0.add(1);
            map.put(0, l0);

            List<Integer> l1 = new ArrayList<>();
            l1.add(1);
            map.put(1, l1);

            List<Integer> l2 = new ArrayList<>();
            l2.add(0);
            map.put(2, l2);
            return map;
        }
    },




    ;

    abstract Map<Integer, List<Integer>> buildConnection();

    /**
     * 获取随机连接
     * @param down
     * @param top
     * @return
     */
    public static Map<Integer, List<Integer>> getRandomConnection(int down, int top) {
        StringBuilder str = new StringBuilder();
        str.append("C");
        str.append(down);
        str.append("_");
        str.append(top);
        List<HuaShiGangModeConnection> connectionList = new ArrayList<>();
        for (HuaShiGangModeConnection connection : HuaShiGangModeConnection.values()) {
            if (connection.name().contains(str)) {
                connectionList.add(connection);
            }
        }
        return connectionList.get(new Random().nextInt(connectionList.size())).buildConnection();
    }
}
